每天给你送来NLP技术干货!
![b9b5d67652d68902168aa6fe8a84601c.png](https://img5.php1.cn/3cdc5/935d/4aa/29707bc1522c584c.png)
paper: Raise a Child in Large Language Model: Towards Effective and Generalizable Fine-tuning
link: https://arxiv.org/pdf/2109.05687.pdf
去年让我印象最深刻的应该就是RDrop和这篇了,趁着晚上有时间,就来简单的说下这篇文章。
总体说一下
由于预训练模型的兴起,最近的研究很多投身于如何在不遗忘预训练模型的参数的同时,又能学到新的下游任务的finetune的方法。比如Henry Gouk提出的distance-based的方法,将finetune学习到的参数控制在原始预训练参数一个球形范围内;哈工大的Sanyuan Chen在EMNLP也提出了recall and learn的方法,即边预训练边学习下游任务的方法,并提出了RecAdam新的算法。
本文的方法采用了更为巧妙地方法,通过mask掉部分梯度来防止更新过度从而导致原始的预训练信息的遗忘,有点像在反向传播中使用前向传播的dropout的方法,巧也,妙也。并在实验中得出普遍比普通finetune方法还要高出1.5~8.6%的性能,也比前人改进的finetune方法高出0.6~1.3个点。
很好在自己的实验上进行落地,所以给大家推荐一下。
两种实验方法
如下图的算法所示,不要被算法吓到,很简单的,总结起来就是通过某个方法找到需要没有被mask的梯度节点(这里叫做child),然后生成0-1mask矩阵,和原来梯度乘就完成了更新与不更新的操作了。
![a9d1e20e75d94d23beb54104ee06c7a5.png](https://img5.php1.cn/3cdc5/935d/4aa/480bd7240c8b5aa3.png)
那么如何选取哪些梯度不更新,作者提出两种方法:
task-free方法,即随便mask梯度
task-driven方法,即需要根据不同任务来决定mask哪些梯度
![449b5191e3ae6e8847784c284e1a0f5b.png](https://img5.php1.cn/3cdc5/935d/4aa/8aa71182bcf3a4cb.png)
第一种为完全类似dropout一样的,随机选取部分梯度节点进行mask,不参与梯度更新,说点学术化点就是服从伯努利分布:
![edeb47ccf98d6169c17587328f78ff5c.png](https://img5.php1.cn/3cdc5/935d/4aa/3314679c526bef0e.png)
其中p_f为保留率,当其为1时就是所有都保留,都不mask,就是普通的finetune了。其中,当mask完后,要对保留下来的梯度进行放大1/p_f倍的操作(类似dropout吧~)。
虽然听起来这个随机的方法很简单,但值得注意的是,这个证明其有效的过程需要好好学学和看看的,这里说下最终结论:
这种随机mask的方法,有助于损失跳出局部最优,跳出鞍点,鼓励模型寻找更为平坦的局部最优面。
另一种方法为基于任务相关的mask方法,这里采用的FIM方法(Fisher Information Matrix),即对每一个梯度平方的期望:
![c9b7d4a76d0eef0304e649fffbc14c16.png](https://img5.php1.cn/3cdc5/935d/4aa/3a997738d08b77f5.png)
求它在每一个样本的均值的梯度:
![654ad9bab8a6b2a40938f2d763f4087e.png](https://img5.php1.cn/3cdc5/935d/4aa/0539569d719b2ac4.png)
这个梯度越大,那么就表示这个梯度节点对该任务就格外重要,相反越不重要的就越要mask了。其中mask的比率就是选择topk的方法一样。
实验
这两种方法和普通finetune方法在4种预训练模型中的性能比较:
![82988cba3bc0619844f953bf3556dcfc.png](https://img5.php1.cn/3cdc5/935d/4aa/7239780e78d3bf3f.png)
上面为主要试验,但感觉为了论文的充分性吧,作者又讨论了该方法的领域泛化性:
![a875db0e3c230fc6b3d292fc7b19d15b.png](https://img5.php1.cn/3cdc5/935d/4aa/669da965579e7009.png)
除此之外,还讨论了任务的泛化性:
![8680f2fa7fbce6c0061df524ec4620f2.png](https://img5.php1.cn/3cdc5/935d/4aa/5d253def8858ed80.png)
都还是挺不错的。
和以往的前沿方法对比,更能体现出其有效性:
![71c2c8f8f01113316478abb3044a55f4.png](https://img5.php1.cn/3cdc5/935d/4aa/f9a358d6d5f16ccd.png)
最后还做了在目前比较火的低资源情况下的性能分析:
![d96bcdc5a18cda5506f45ef2e4dce537.png](https://img5.php1.cn/3cdc5/935d/4aa/81329f51134960c5.png)
这篇文章还是很不错的,不光是方法,更是学习如何将一个十分简单的idea写成故事(8页论文)的能力。
学习道路长且艰,与君共勉。
下载一:中文版!学习TensorFlow、PyTorch、机器学习、深度学习和数据结构五件套! 后台回复【五件套】
下载二:南大模式识别PPT 后台回复【南大模式识别】
投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。
方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。
![c4892f48465e18731a47ef501263555b.png](https://img5.php1.cn/3cdc5/935d/4aa/ea4237a67a5437c4.png)
记得备注呦
整理不易,还望给个在看!